export const BMap = window.BMap;
const geolocation = new BMap.Geolocation();
const myGeo = new BMap.Geocoder();
export const LocalCity = () => {
  return new Promise((resolve, reject) => {
    const myCity = new BMap.LocalCity();
    myCity.get((result) => {
      // 广州市

      result.name = result.name.replace("市", '');
      // result.name="中国广东3333333333333333333"
      // 如果城市名称太长了 截取  4个字或者三个字 ... 
      resolve(result);
    });
  })
}

// 获取到当前的城市信息 
export const getCurrentCity = () => {
  return new Promise(async (resolve, reject) => {
    // 获取当前的经纬度
    const r = await getCurrentPosition();
    //  根据经纬度来获取所在城市
    const res = await getLocation(r);
    resolve(res)

  })
}


// 对百度地图 获取当前的地址的经纬度
export const getCurrentPosition = () => {
  return new Promise((resolve, reject) => {
    // 开启SDK辅助定位
    geolocation.enableSDKLocation();
    geolocation.getCurrentPosition(function (r) {
      if (this.getStatus() == window.BMAP_STATUS_SUCCESS) {
        // alert('您的位置：' + r.point.lng + ',' + r.point.lat);
        resolve(r)
      }
      else {
        alert('failed' + this.getStatus());
        reject(r);
      }
    });
  })
}

// 根据经纬度 获取 所在城市
export const getLocation = (r) => {
  return new Promise((resolve, reject) => {
    const myGeo = new BMap.Geocoder();
    myGeo.getLocation(new BMap.Point(r.point.lng, r.point.lat), function (result) {
      if (result) {
        // 成功获取到了
        // alert(result.address);
        resolve(result)
      }
      else {
        // console.log(result);
        reject(result)
      }
    })
  });
}


// 根据城市名称来获取经纬度
export const getPositionByName = ({ cityName, address }) => {
  // obj ={cityName:"广州",address:"北京市海淀区上地10街10号 "}
  if (!address) {
    address = cityName;
  }
  return new Promise((resolve, reject) => {
    // 根据一个很详细的信息来获取 当前的地址信息了
    // 北京市海淀区上地10街10号 
    myGeo.getPoint(address, function (point) {
      if (point) {
        resolve(point)
      }
    },
      cityName);
  })
}


/* 
1 大目标 想根据当前的城市名称 来获取 城市的详细信息
  1 刚才封装了一个方法 根据城市名称来获取经纬度
  2 在以前 已经封装过了一个  根据经纬度来获取 城市信息的方法  getLocation
 */


//  根据城市名称 获取该城市的信息信息
export const getCityInfoByName=({ cityName, address })=>{
  console.log("getCityInfoByName");
  return new Promise(async(resolve,reject)=>{
    // 1 先获取传入进来的城市的 经纬度  getPositionByName
    let point=await getPositionByName({ cityName, address });
    point={
      point:point
    }
    // 2 再根据经纬度来获取城市的详细信息
    const result=await getLocation(point);
    resolve(result);
  })
}